// 支付处理工具函数

/**
 * 调起微信支付
 * @param {Object} payData - 支付数据
 * @param {string} payData.timeStamp - 时间戳
 * @param {string} payData.nonceStr - 随机串
 * @param {string} payData.package - 订单包
 * @param {string} payData.signType - 签名类型
 * @param {string} payData.paySign - 支付签名
 * @param {Function} callback - 支付成功回调函数
 * @returns {Promise} 返回Promise对象
 */
export function invokeWechatPay(payData, callback) {
  return new Promise((resolve, reject) => {
    // 检查是否在微信环境
    const ua = window.navigator.userAgent.toLowerCase()
    const isWechatEnv = ua.indexOf('micromessenger') > -1
    
    if (!isWechatEnv) {
      reject(new Error('当前环境不是微信环境，无法使用微信支付'))
      return
    }
    
    console.log(payData)
    
    // 调起微信支付 - 直接使用WeixinJSBridge
    if (typeof window.WeixinJSBridge !== 'undefined') {
      // 已经加载了WeixinJSBridge
      window.WeixinJSBridge.invoke('getBrandWCPayRequest', {
        appId: payData.appId,
        timeStamp: payData.timeStamp,  // 时间戳
        nonceStr: payData.nonceStr,    // 随机串
        package: payData.package,      // 订单包
        signType: payData.signType || 'MD5',  // 签名类型
        paySign: payData.paySign       // 支付签名
      }, function(res) {
        if (res.err_msg === 'get_brand_wcpay_request:ok') {
          // 支付成功后的回调函数
          if (callback && typeof callback === 'function') {
            callback(res)
          }
          resolve(res)
        } else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
          // 用户取消支付
          reject(new Error('用户取消支付'))
        } else {
          // 支付失败
          reject(new Error('微信支付失败: ' + res.err_msg))
        }
      })
    } else {
      // 等待WeixinJSBridgeReady事件触发后再执行
      document.addEventListener('WeixinJSBridgeReady', function() {
        window.WeixinJSBridge.invoke('getBrandWCPayRequest', {
          timeStamp: payData.timeStamp,  // 时间戳
          nonceStr: payData.nonceStr,    // 随机串
          package: payData.package,      // 订单包
          signType: payData.signType || 'MD5',  // 签名类型
          paySign: payData.paySign       // 支付签名
        }, function(res) {
          if (res.err_msg === 'get_brand_wcpay_request:ok') {
            // 支付成功后的回调函数
            if (callback && typeof callback === 'function') {
              callback(res)
            }
            resolve(res)
          } else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
            // 用户取消支付
            reject(new Error('用户取消支付'))
          } else {
            // 支付失败
            reject(new Error('微信支付失败: ' + res.err_msg))
          }
        })
      }, false)
    }
  })
}

/**
 * 处理支付结果
 * @param {Object} paymentResult - 支付结果对象
 * @returns {Object} 处理后的支付结果
 */
export function handlePaymentResult(paymentResult) {
  // 根据实际业务需求处理支付结果
  if (!paymentResult || typeof paymentResult !== 'object') {
    return {
      success: false,
      message: '支付结果无效'
    }
  }
  
  // 这里根据后端返回的支付结果结构进行处理
  if (paymentResult.code === 0 && paymentResult.data) {
    return {
      success: true,
      data: paymentResult.data,
      message: '支付请求成功'
    }
  } else {
    return {
      success: false,
      message: paymentResult.message || '支付请求失败'
    }
  }
}

/**
 * 检查支付环境
 * @returns {Object} 环境检查结果
 */
export function checkPaymentEnvironment() {
  const ua = window.navigator.userAgent.toLowerCase()
  
  return {
    isWechatEnv: ua.indexOf('micromessenger') > -1,
    isMobile: /mobile|android|iphone|ipad|ipod|ios/i.test(ua),
    browser: {
      isChrome: ua.indexOf('chrome') > -1,
      isSafari: ua.indexOf('safari') > -1 && ua.indexOf('chrome') === -1,
      isFirefox: ua.indexOf('firefox') > -1,
      isEdge: ua.indexOf('edge') > -1 || ua.indexOf('edg') > -1
    }
  }
}

/**
 * 获取默认的支付参数
 * @param {Object} customParams - 自定义参数
 * @returns {Object} 合并后的支付参数
 */
export function getDefaultPaymentParams(customParams = {}) {
  const defaultParams = {
    payType: 'wxpay',
    tradeType: checkPaymentEnvironment().isWechatEnv ? 'mp' : 'h5',
    returnUrl: window.location.href
  }
  
  return {
    ...defaultParams,
    ...customParams
  }
}